Hadoop完全分布搭建(这里以3台主机为例)+Hbase+Eclipse连接 您所在的位置:网站首页 如果不启动hadoop 则hbase完全无法使用 Hadoop完全分布搭建(这里以3台主机为例)+Hbase+Eclipse连接

Hadoop完全分布搭建(这里以3台主机为例)+Hbase+Eclipse连接

2023-11-19 13:48| 来源: 网络整理| 查看: 265

 

 

 

一、网络配置

1.1网络配置(建议用管理员权限启动虚拟机,防止出现权限不足或者lock等问题)

1.11打开虚拟机点击安装好的centos系统

b093d528b074418ab5a688fdff09aba6.png

 

 1.12点击虚拟机的编辑后选择虚拟网络编辑器

445e70d43a274bffb15813f61e325e53.png

 1.13点击VMnet8

e45ccf98e39b43a29305c078604f0acc.png

1.14点击NAT设置并关闭

cf91f936dc254a7393ba650a420c1451.png

1.15查看网关IP并记住(我这边是192.168.138.2) 

0304340181ef419895d1cfc66a7ee50e.png

1.16打开主机网络点击更改设备选择器

7b666b78fe8145b09b8bbfe77fcc0799.png

1.17点击VMnet8后右键点击属性

2636b18aec164d45819d481d6d73765c.png 1.18选择Internet协议版本4(TPC/IPv4) 

967ab601624f4766b5a12819b9e7cef3.png

1.19 IP、网关配置(配置完网络环境后千万不要去共享网络不然xshell和xftp到时候连接不上虚拟机系统。)

8f086d7c1c78492f9f6c88d99fc6508a.png

1.2启动centos系统,进行centos网络配置

1.21右键桌面打开终端,输入su指令按Enter键后输入密码进入root用户(为了更好的完成下面配置)

c7e5459fbdd043f79a8eec7159663822.png

400e77919b424eb3a3ab08d72e31e1e4.png

1.22进入网络配置文件

vim /etc/sysconfig/network-scripts/ifcfg-ens33

 

把BOOTPROTO修改为static    ONBOOT修改为yes

添加(IPADDR前三位要跟虚拟机网关一致,NETMASK跟主机网络配置一致,GATEWAY,DNS1填写虚拟机网关,如果不配做DNS1会出现ping不通域名)

这里以虚拟网关为192.168.138.2为例子进行配置,每台机的虚拟机网关都不一样,请勿完全照搬!

IPADDR=192.168.138.88 NETMASK=255.255.255.0 GATEWAY=192.168.138.2 DNS1=192.168.138.2

88b11f33d3324e34ac2f4ac50e8f4e7c.png

 

配置完后重启网络

重启网络

service network restart

另外两台主机网络配置方法与上面相同。

1.23测试网络(先把防火墙关了)

关闭防火墙命令

systemctl stop firewalld.service

查看防火墙状态

systemctl status firewalld.service

测试

ping www.baidu.com

399a04dcda71401088833c9f851a73b7.png

使用Ctrl+Z停止ping百度

主机ping虚拟机(如果ping不通很大可能是虚拟机防火墙未关闭) 

528f2bb097c348d692368e7a8f32f721.png

虚拟机ping主机(如果ping不通主机IP很大可能是主机防火墙未关闭)

c60a6c08822745439b880f3272551f98.png

使用Ctrl+Z停止ping主机IP

如果没有事先准备好另外两台虚拟机则可以用这台虚拟机进行克隆然后修改IP。

1.24解决虚拟机ping不通主机IP方法

打开主机网络打开防火墙选择高级设置点击入站规则点击按配置文件筛选后选择按公用配置文件筛选找到(回显请求 – ICMPv4-In)改为允许。

9075c39e650744ad9b968c511c4365d1.png

e89ff879753243df9649a1b1946017fa.png

63966da57681437e80e52835bdc4893f.png

1adf6f1f481c46729eb4e1f4029f60bc.png

f0e94fe0bc3444c0960da3dba9f71aa5.png

 

二、压缩包准备(百度网盘提取码1221)

压缩包下载链接

48023d39eaa24497ba550a2b6213d0e2.png

1.1hadoop完全分布搭建(建议用管理员权限启动虚拟机,防止出现权限不足或者lock等问题,在配置hadoop集群过程中建议切换到root用户下进行配置)

1.2修改主机名(这里修改为node1,也作为主机使用)

hostnamectl set-hostname node1

查看主机名

hostname

配置主机名(如果忘记主机IP可以用ifconfig命令来查询),这里添加3台主机,另外两台主机配置内容也一样,都是这三个IP+主机名

vim /etc/hosts

811f8f2b55424e3fb286f7fdee102289.png

 免密码登录配置(三台主机都按下面方法操作一遍)

执行

ssh-keygen -t rsa

按三次Enter键如果中途出现选择请选择yes

 公钥追加到~/.ssh/authorized_keys文件中

ssh-copy-id -i ~/.ssh/id_rsa.pub 第一台主机名 ssh-copy-id -i ~/.ssh/id_rsa.pub 第二台主机名 ssh-copy-id -i ~/.ssh/id_rsa.pub 第三台主机名

测试免密码登录三台都测试,当测试完一台后记得退出当前测试主机:

ssh 主机名

退出当前主机

exit

df10354cc09e41e5b5d05c022f24ea57.png

 

1.3安装jdk

1.31卸载原先的java jdk

rpm -qa | grep java

根据显存版本进行卸载操作

rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64

1.32安装jdk

将jdk压缩包拷贝到虚拟机系统的一个目录上(这里拷贝到/usr/java下,一般来说usr目录下是没有java文件夹需要自己创建一个 (mkdir java))

在java目录下进行解压压缩包

tar -zxvf 压缩包名称

修改配置文件 

vim ~/.bashrc

在文件的最后添加下面的jdk信息

export JAVA_HOME=centos系统中的jdk路径 export CLASSPATH=$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH

配置完成后执行下面代码使环境变量生效

source ~/.bashrc

查看java版本 

java -version

 将上面配置复制到其他两台主机 

scp -r 复制文件路径 接收文件主机名:接收文件路径

 例如:scp -r /usr/java node1:/usr/

1.33hadoop安装

进入hadoop压缩包目录

解压hadoop压缩包

tar -zxvf 压缩包名

可创建文件软链接,简化配置

ln -s 解压后文件名 hadoop

配置环境变量

vim ~/.bashrc

在文件的最后添加下面的hadoop信息

export HADOOP_HOME=hadoop路径 export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

配置完成后执行下面代码使环境变量生效

source ~/.bashrc

总共要修改的配置文件全部都在hadoop/etc/hadoop目录下,其中hdfs-site.xml这个文件需要设置3个目录来存放一些hadoop运行过程中的临时数据,也就是在hadoop目录下,创建一个dfs和tmp,再在dfs目录下创建name和data目录。hadoop的八个配置文件中,有3个配置文件只需要修改jdk路径。分别是hadoop-env.sh,yarn-env.sh,mapred-env.sh。找到 export JAVA_HOME=  , 等号后面改成centos系统中的jdk路径 即可。   当然,如果前面有#注释,可以把注释去掉(一般都没有注释)。

进入hadoop/etc/hadoop目录

1.34core-site.xml配置

执行

vim core-site.xml fs.defaultFS hdfs://node1:9000 io.file.buffer.size 131072 hadoop.tmp.dir file:hadoop中tmp路径 Abase for other temporary directories.

 1.35hdfs-site.xml配置

vim hdfs-site.xml dfs.namenode.secondary.http-address node2:9001 dfs.namenode.name.dir file:hadoop的dfs中的name文件夹路径 dfs.datanode.data.dir file:hadoop的dfs中的data文件夹路径 dfs.replication 3 dfs.webhdfs.enabled true

b1474a5c7e164b28a8f984bef13baeb2.png

 

 1.36配置mapred-site.xml

如果没有修改文件则执行

cp mapred-site.xml.template mapred-site.xml

执行

vim mapred-site.xml mapreduce.framework.name yarn mapreduce.jobhistory.address node1:10020 mapreduce.jobhistory.webapp.address node1:19888

1.37配置yarn-site.xml

执行

vim yarn-site.xml yarn.nodemanager.resource.memory-mb 1024 yarn.nodemanager.resource.cpu-vcores 1 yarn.resourcemanager.hostname node1 yarn.nodemanager.aux-services mapreduce_shuffle yarn.nodemanager.env-whitelist JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.resourcemanager.address node1:8032 yarn.resourcemanager.scheduler.address node1:8030 yarn.resourcemanager.resource-tracker.address node1:8031 yarn.resourcemanager.admin.address node1:8033 yarn.resourcemanager.webapp.address node1:8088

 1.38配置workers

执行

vim workers 第一台主机名 第二台主机名 第三台主机名

f0707afcd8ba4cfcb0c15a98d1ce710b.png

 

1.39格式化

hdfs namenode -format

1.40将上面配置复制到其他两台主机 

scp -r 复制文件路径 接收文件主机名:接收文件路径

例如:scp -r /usr/hadoop node1:/usr/

1.41启动停止Hadoop的环境(只需在主机上启动即可,另外两台主机会跟着启动)

start-all.sh stop-all.sh

1.42查看进程

jps

2.1Zookeeper集群搭建

进入zookeeper压缩包目录

解压zookeeper压缩包

tar -zxvf 压缩包名

可创建文件软链接,简化配置

ln -s 解压后文件名 zookeeper

进入zookeeper文件夹,创建tmp文件夹

mkdir tmp

配置环境变量

vim ~/.bashrc

在文件的最后添加下面的zookeeper信息

export ZOOKEEPER_HOME=zookeeper文件路径 export PATH=$ZOOKEEPER_HOME/bin:$PATH

配置完成后执行下面代码使环境变量生效

source ~/.bashrc

ZooKeeper的核心服务器属性配置文件是zoo.cfg。在主安装目录下的conf子目录内,系统为用户准备了一个模板文件zoo_sample.cfg,我们可以将这个文件拷贝一份,命名为zoo.cfg,然后修改配置文件。首先我们进入到conf子目录,执行以下命令:

cp zoo_sample.cfg zoo.cfg vim zoo.cfg #tickTime:CS通信心跳时间 tickTime=2000 #initLimit:LF初始通信时限 initLimit=5 #syncLimit:LF同步通信时限 syncLimit=2 #dataDir:数据文件目录 dataDir=zookeeper中tmp文件路径,tmp文件夹需要自己在zookeeper文件夹中创建 #clientPort:客户端连接端口 clientPort=2181 #服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口) server.1=node1:2888:3888 server.2=node2:2888:3888 server.3=node3:2888:3888

在zookeeper中tmp下创建一个文件myid

进入zookeeper文件夹

vim myid

在myid里面输入1 

 将上面配置复制到其他两台主机 

scp -r 复制文件路径 接收文件主机名:接收文件路径

例如:scp -r /usr/zookeeper node1:/usr/ 

复制完成后一定要修改另外两台机的myid

修改第二台主机的myid,改为2

修改第三台主机的myid,改为3

启动

分别在每台机器上运行zkServer.sh start命令

zkServer.sh start

查看状态

运行

zkServer.sh status

有一台显示:Mode: leader,其他机器显示:Mode: follower。

3.1Hbase集群搭建

进入Hbase压缩包目录

解压Hbase压缩包

tar -zxvf 压缩包名

可创建文件软链接,简化配置

ln -s 解压后文件名 hbase

创建zookeeper数据目录

进入hbase文件夹

mkdir zookeeper

配置环境变量

vim ~/.bashrc

在文件的最后添加下面的Hbase信息

export HBASE_HOME=hbase文件夹路径 export PATH=$HBASE_HOME/bin:$PATH

配置完成后执行下面代码使环境变量生效

source ~/.bashrc

 修改配置文件hbase-env.sh

进入hbase的conf文件夹

vim hbase-env.sh

在打开的文件中,找到“# export JAVA_HOME”开头的文件,去掉前面的“#”,修改为:

export JAVA_HOME=jdk文件路径

另外,找到“# export HBASE_MANAGES_ZK”开头的文件,去掉前面的“#”,修改为:

export HBASE_MANAGES_ZK=true

再修改配置文件hbase-site.xml

vim  hbase-site.xml hbase.rootdir hdfs://node1:9000/hbase hbase.cluster.distributed true hbase.zookeeper.quorum node1,node2,node3 dfs.replication 2 hbase.master.maxclockskew 180000 hbase.zookeeper.property.dataDir hbase中zookeeper文件路径(若没有zookeeper文件夹则在hbase文件夹中自己创建)

修改配置文件regionservers

vim regionservers

在打开的文件中,将里面的内容修改为:

node1 node2 node3

再在另外两台机器执行上面同样的操作,或在第一台机器执行下面命令,将hbase目录拷贝过去。

scp -r 复制文件路径 接收文件主机名:接收文件路径

启动Hbase

start-hbase.sh

查看进程

jps

4.1Eclipse调用HBase集群安装配置

打开Eclipse软件 --> 新建Java项目(File --> New --> Other --> Java Project --> 输入项目名称)(这里是HBaseBasic)

导入jar包

新建文件夹lib,右击项目 --> New --> Folder --> 输入文件夹名称“lib”

将hbase的lib目录下所有jar包放到lib下

右键项目根目录,选择 “Properties”->“Java Build Path”->“Library”->“Add External JARs”,将lib子目录下所有jar 包添加到本工程的Classpath下

完成上述操作后刷新一下

添加hbase-site.xml

右击项目名 --> New --> Source Folder --> 输入项目名称,这里取名为conf

将虚拟机集群上配置的hbase-site.xml文件复制到conf目录下

修改hosts文件(存放位置:C:\Windows\System32\drivers\etc)

添加如下内容(Note:ip和主机名根据集群上的配置做出相应的修改。)

IP+虚拟机主机名

例如:

192.168.138.88  node1 192.168.138.89  node2 192.168.138.90  node3

afdb2ad3b2c94ceaa4ff3815e4a7d3a1.png

 

注:如何是window10或window11的用户请把hosts这个文件拉出来修改,待修改完后再拉进去替换。

测试(类这里命名为HbaseBean.java)

在Eclipse创建的项目中的src里面创建一个java类文件(后缀名为.java的文件)在文件中添加如下内容:

package test; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.HColumnDescriptor; import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import org.apache.hadoop.hbase.client.Admin; import org.apache.hadoop.hbase.client.Connection; import org.apache.hadoop.hbase.client.ConnectionFactory; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Put; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.client.Table; import org.apache.hadoop.hbase.util.Bytes; public class HbaseBean { static Configuration configuration = HBaseConfiguration.create(); public static Connection connection; public static Admin admin; // create a new table. //columnFamily代表列族 public static void create(TableName tablename, String columnFamily) throws Exception { connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); if (admin.tableExists(tablename)) { System.out.println("table Exists!"); System.exit(0); } else { //can use HTableDescriptor and HColumnDescriptor to modify table pattern. HTableDescriptor tableDesc = new HTableDescriptor(tablename); tableDesc.addFamily(new HColumnDescriptor(columnFamily)); admin.createTable(tableDesc); System.out.println("create table successfully!"); } } // insert a record. public static void put(TableName tablename, String row, String columnFamily, String column, String data) throws Exception { connection = ConnectionFactory.createConnection(configuration); Table table = connection.getTable(tablename); Put p = new Put(Bytes.toBytes(row)); p.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(data)); table.put(p); System.out.println("put '" + row + "','" + columnFamily + ":" + column + "','" + data + "'"); } // get data of some row for one table. // which equals to hbase shell command of " get 'tablename','rowname' " public static void get(TableName tablename, String row) throws IOException { connection = ConnectionFactory.createConnection(configuration); Table table = connection.getTable(tablename); Get g = new Get(Bytes.toBytes(row)); Result result = table.get(g); System.out.println("Get Info: " + result); } // get all data of this table, using "Scan" to operate. public static void scan(TableName tablename) throws Exception { connection = ConnectionFactory.createConnection(configuration); Table table = connection.getTable(tablename); Scan s = new Scan(); ResultScanner rs = table.getScanner(s); for (Result r : rs) { System.out.println("Scan info: " + r); } } // delete a table, this operation needs to disable table firstly and then delete it. public static boolean delete(TableName tablename) throws IOException { connection = ConnectionFactory.createConnection(configuration); admin = connection.getAdmin(); if (admin.tableExists(tablename)) { try { admin.disableTable(tablename); admin.deleteTable(tablename); } catch (Exception ex) { ex.printStackTrace(); return false; } } return true; } public static void main(String[] agrs) { TableName tablename = TableName.valueOf("hbase_test"); String columnFamily = "columnVal"; try { //Step1: create a new table named "hbase_test". HbaseBean.create(tablename, columnFamily); //Step2: insert 3 records. HbaseBean.put(tablename, "row1", columnFamily, "1", "value1"); HbaseBean.put(tablename, "row2", columnFamily, "2", "value2"); HbaseBean.put(tablename, "row3", columnFamily, "3", "value3"); //Step3: get value of row1. HbaseBean.get(tablename, "row1"); //Step4: scan the full table. HbaseBean.scan(tablename); //Step4: delete this table. if (HbaseBean.delete(tablename) == true) System.out.println("Delete table:" + tablename + " success!"); } catch (Exception e) { e.printStackTrace(); } } }

 在虚拟机主机中启动hadoop进程和hbase进程后运行上述代码。

结果:

c7322b8e4eb5434caf58e79fe401d570.png

 运行结果为下图所示则证明配置成功

4281c59e076b4be79eeb70aa8066792b.png

 

 

配置完成 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有